Constructeur
Peu utilisé
let toto = new Object();
toto.nom = "Toto";
toto.age = 25;
Notation littérale
La plus répandue et conseillée.
let toto = {
"nom" : "Toto",
"age" : 25
};
let toto = {
"nom" : "Toto",
"activites" : { //la propriété activites est elle-même un objet
"jour" : "travail",
"nuit" : "dodo"
}
};
let titi = {
"nom" : "Titi",
"activites" : null
};
let personnes = { "toto" : toto, "titi" : titi };
_
) ou un dollar ($
)0
à 9
)Si les noms de propriétés respectent les règles des identifiants en javascript, les guillemets (simples ou doubles) sont optionnels.
let toto = {
"nom" : "Toto",
'age' : 25,
genre : "M"
}; //ok
Cela peut conduire à des écritures un peu déroutantes :
let toto = { nom : "Toto", age : 25 };
let tata = { nom : "Tata", age : 22 };
let personnes = { toto : toto, tata : tata };
Depuis ES6, cela peut s'écrire :
let toto = { nom : "Toto", age : 25 };
let tata = { nom : "Tata", age : 22 };
let personnes = { toto, tata };
Si les noms de propriétés ne respectent pas les règles des identifiants en javascript, les guillemets (simples ou doubles) sont obligatoires.
let toto = { 1-nom : "Toto", 2-age : 25 };
let toto = {
"1-nom" : "Toto",
'2-age' : 25
};
//ok
La clarté et la concision de la notation littérale des objets en javascript ont donné naissance au format JSON, devenu le format d'échange de données le plus répandu dans le monde du web.
Limitation du JSON par rapport à la notation littérale :
let toto = {
nom : "Toto",
age : 25
};
toto.age; //25
let toto = {
nom : "Toto",
age : 25
};
toto["age"]; //25
Les noms de propriétés peuvent dans ce cas ne pas respecter les règles des identifiants de variables.
let toto = {
"1-nom" : "Toto",
"2-age" : 25
};
toto["2-age"]; //25
Une tentative d'accès à une propriété non définie ne renvoie pas d'erreur mais la valeur primitive undefined
:
let toto = { nom : "Toto", age : 25 };
toto.nbEnfants; //undefined
On peut également tester l'existence d'une propriété par l'opérateur in
:
let toto = { nom : "Toto", age : 25 };
"nbEnfants" in toto; //false
let toto = {
nom : "Toto",
age : 25
};
let { age, nom } = toto;
nom; // "Toto"
age; // 25
Equivalent à :
let toto = {
nom : "Toto",
age : 25
};
let age = toto.age;
let nom = toto.nom;
let toto = {
nom : "Toto",
age : 25
};
let { age : ageToto, nom : nomToto } = toto;
ageToto; //25
nomToto; //"Toto"
let toto = {
nom : "Toto",
age : 25,
telephone : {
portable : "06 25 32 XX XX",
pro : "05 61 07 XX XX"
}
};
let { telephone : { portable } } = toto;
portable; //"06 25 32 XX XX";
telephone; // ReferenceError: telephone is not defined
let toto = {
nom : "Toto",
age : 25,
adresse : "24 rue Mozart",
profession : "informaticien"
};
let { nom, age, ...autres } = toto;
autres; //{ adresse : "24 rue Mozart", profession : "informaticien" };
let prop = "nom";
let monObjet = {
[prop] : "Toto"
};
monObjet.nom; // Toto
let toto = {
nom : "Toto",
age : 25,
genre : "M"
};
for (let key in toto) {
console.log(key, toto[key]);
}
let toto = {
nom : "Toto",
age : 25,
genre : "M"
};
let tab = Object.keys(toto);
console.log(tab); //"nom,age,genre"
let toto = {
nom : "Toto",
age : 25,
genre : "M"
};
let tab = Object.values(toto);
console.log(tab); //"Toto,25,M"
Les tableaux font l'objet d'un chapitre dédié.
delete
let toto = {
nom : "Toto",
age : 25,
genre : "M"
};
delete toto.genre;
delete toto.prenom; // ne génère pas d'erreur
console.log("genre" in toto); //false
Valables dans tous les environnements d'exécution :
Object
: constructeur d'objetsFunction
: constructeur de fonctionsArray
: constructeur de tableauxString
: constructeur d'objets chaînes de caractèresBoolean
: constructeur d'objets booléensNumber
: constructeur d'objets nombresMath
: objet natif pour fonctions mathématiquesDate
: constructeur d'objets datesRegExp
: constructeur d'expressions rationnellesJSON
: objet natif pour manipulation du JSONError (Error, EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError)
: constructeurs d'erreursArrayBuffer
DataView
Float32Array
Float64Array
Int8Array
Int16Array
Int32Array
Map
Proxy
Promise
Set
Symbol
Uint8Array
Uint8ClampedArray
Uint16Array
Uint32Array
WeakMap
WeakSet
Reflect
Objet intrinsèque qui représente l'espace global dans un environnement javascript. Il est créé lors de l'initialisation du moteur de script.
Définir une propriété de l'objet global revient à définir une variable globale.
Dans l'environnement d'un navigateur web, cet objet global est window
.
typeof window; //"object"
window.toto = "tata";
toto; //"tata";
Référence vers l'objet global de l'environnement, et donc indépendamment de celui-ci.
Dans l'environnement d'un navigateur web, globalThis
et window
sont le même objet.
Contrairement aux valeurs primitives, une variable à laquelle on affecte un objet contient une référence vers cet objet
let toto = { //toto contient une référence vers l'objet
nom:"Toto",
age:26
};
let tata = toto; //tata contient une copie de la référence vers l'objet
tata.nom = "Tata";
toto.nom; //Tata
tata = null;
toto; //{"nom"":"Tata",age:26}
let toto = {
nom:"Toto",
age:26
};
let tata = { ...toto };
tata.nom = "Tata";
toto.nom; //Toto
let toto = {
nom:"Toto",
age:26,
activites : {
jour : "travail",
nuit : "dodo"
}
};
let tata = { ...toto };
tata.activites.jour = "sport";
toto.activites.jour; // sport
let toto = {
nom:"Toto",
age:26,
activites : {
jour : "travail",
nuit : "dodo"
}
};
let tata = structuredClone(toto);
tata.activites.jour = "sport";
toto.activites.jour; // travail
Remarque : les fonctions ne sont pas clonables.